const path = require('path')

const resolve = dir => {
    return path.join(__dirname, dir)
}

// 项目部署基础
// 默认情况下，我们假设你的应用将被部署在域的根目录下,
// 例如：https://www.my-app.com/
// 默认：'/'
// 如果您的应用程序部署在子路径中，则需要在这指定子路径
// 例如：https://www.foobar.com/my-app/
// 需要将它改为'/my-app/'
const BASE_URL = process.env.NODE_ENV === 'production'
    ? '/'
    : '/'

function addStyleResource (rule) {
    rule.use('style-resource')
        .loader('style-resources-loader')
        .options({
            patterns: [
                path.resolve(__dirname, './src/assets/less/imports.less')
            ]
        })
}

module.exports = {
    publicPath: BASE_URL,
    chainWebpack: config => {
    // 自动化导入less变量文件
        const types = ['vue-modules', 'vue', 'normal-modules', 'normal']
        types.forEach(type => addStyleResource(config.module.rule('less').oneOf(type)))

        config.resolve.alias
            .set('@', resolve('src')) // key,value自行定义，比如.set('@@', resolve('src/components'))
            .set('_c', resolve('src/components'))
            .set('_conf', resolve('config'))

        // 生产环境打包配置
        config.when(process.env.NODE_ENV === 'production', config => {
            // 修改 splitChunks 配置
            let splitChunks = config.optimization.get('splitChunks')
            splitChunks.cacheGroups = Object.assign({}, splitChunks.cacheGroups, {
                // 单独提取 iview (500kb+)
                iview: {
                    name: 'chunk-iview',
                    test: /[\\/]node_modules[\\/]iview[\\/]/,
                    priority: -8,
                    chunks: 'initial'
                },
                // 单独提取 echarts (600kb+)
                echarts: {
                    name: 'chunk-echarts',
                    test: /[\\/]node_modules[\\/]echarts[\\/]/,
                    priority: -8,
                    chunks: 'async'
                },
                // 单独提取 国家坐标 json数据(900kb+)
                world: {
                    name: 'chunk-world',
                    test: /.+[\\/]home[\\/]world\.json$/,
                    priority: -8,
                    chunks: 'async'
                }
            })
            config.optimization.set('splitChunks', splitChunks)
            // 修改 minimizer 配置
            let minimizer = config.optimization.get('minimizer')
            // 查找UglifyJs插件配置
            const UglifyJsIndex = minimizer.findIndex(plug => plug.hasOwnProperty('options') && plug.options.hasOwnProperty('uglifyOptions'))
            if (UglifyJsIndex > -1) {
                let UglifyJsOptions = minimizer[UglifyJsIndex]
                UglifyJsOptions.options.uglifyOptions.compress.drop_console = true // 清除console.* 打印方法
            }
            config.optimization.set('minimizer', minimizer)

            // 增加 webpack.IgnorePlugin 插件
            // moment 不使用 locale 国际化功能 只使用核心功能减小体积
            config
                .plugin('moment')
                .use(require('webpack/lib/IgnorePlugin'), [{
                    resourceRegExp: /^\.\/locale$/,
                    contextRegExp: /moment$/
                }])
        })
    },
    // 打包时不生成.map文件
    productionSourceMap: false,
    // 这里写你调用接口的基础路径，来解决跨域，如果设置了代理，那你本地开发环境的axios的baseUrl要写为 '' ，即空字符串
    devServer: {
        port: 8090, // 端口号
        host: 'localhost',
        https: false, // https:{type:Boolean}
        open: true, // 配置自动启动浏览器
        proxy: {
            // 文件代理
            '/file/path': {
                target: 'http://192.168.52.183:8090',
                changeOrigin: true
            },
            // 开发环境
            '/dev': {
                target: 'http://47.106.247.203:9005',
                // target: 'http://192.168.11.21:9005',
                pathRewrite: {
                    '^/dev': ''
                },
                changeOrigin: true,
                secure: false
            }
        }
    }
}
